package org.lanqiao.tjut.testpractice0801;

import java.util.Scanner;

import org.junit.Test;

public class TestDriver {
	/*
	 * 【程序20】    
	 * 题目：有一分数序列：2/1，3/2，5/3，8/5，13/8，21/13...求出这个数列的前20项之和。 
	 */
	@Test
	public void test01(){
		double m=1;
		double z=2;
		double x;
		double sum=0;
		int n=0;
		while(n<20){
			x=z/m;
			System.out.print("  "+x);
			sum=sum+x;
			double temp=m;
			m=z;
			z=temp+z;
			n++;
		}
		System.out.println();
		System.out.println("该数列前 "+n+" 的和为："+sum);
	}
	
	/*
	 * 【程序21】    题目：求1+2!+3!+...+20!的和 
	 */
	@Test
	public void test02() {
		long sum = 0;
		long allSum = 0;
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入阶数：");
		int n = sc.nextInt();
		for (int i = 1; i <=n; i++) {
			System.out.println("第 "+i+" 次阶乘结果打印");
			for (int j = 1; j <=i; j++) {
				long J = Jiecheng(j);
				sum = sum + J;
				System.out.print(" "+J);
			}
			System.out.println();
			System.out.println("每次阶乘求和结果："+sum);
			allSum = allSum+sum;
			//清零，用于每次阶层求和
			sum=0;
		}
		System.out.println("总的阶乘求和结果"+allSum);
	}

	/**
	 *  递归求阶乘方法
	 * @param n
	 * @return
	 */
	public long Jiecheng(int n) {
		// 递归结束条件
		if (n == 1) {
			return 1;
		}

		return n * Jiecheng(n - 1);

	}


	/*
	 * 【程序22】
	 * 题目：利用递归方法求5!。
	 */
	@Test
	public void test03(){
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入阶数：");
		int n = sc.nextInt();
		//调用递归方法，求阶乘
		long sum = Jiecheng(n);
		System.out.println(n+" 的阶乘结果："+sum);
	}
	
	/*
	 * 【程序23】    题目：有5个人坐在一起，
	 * 问第五个人多少岁？他说比第4个人大2岁。
	 *  问第4个人岁数，他说比第3个人大2岁。
	 * 问第三个人，又说比第2人大两岁。 
	 * 问第2个人，说比第一个人大两岁。 
	 * 最后问第一个人，他说是10岁。
	 *  请问第五个人多大？
	 */
	@Test
	public void test04(){
		Scanner sc = new Scanner(System.in);
		System.out.println("求第几个人的年龄？");
		int p = sc.nextInt();
		//默认第一个人10岁
		int n=10;
		//for循环求年龄
		for(int i=1;i<p;i++){
			n=n+2; 
		}
		System.out.println("for循环法求得第 "+p+" 个人的年龄为："+n+"岁。");
		int age = initAge(p);
		System.out.println("递归调用法求得第 "+p+" 个人的年龄为："+age+" 岁。");
	}
	public int initAge(int p){
		if(p==1){
			return 10;
		}
		return 2+initAge(p-1);
		
	}
}
